در این جلسه از آموزش، با روشهای مختلف ایجاد فایل در محیط خطفرمان لینوکس آشنا میشویم.
دو فرمان بسیار مهم در این زمینه، echo و touch هستند
که هر کدام کاربردهای خاص خود را دارند. همچنین با مفهوم تغییردهندههای خروجی (Redirection)
آشنا میشویم که به ما امکان میدهند خروجی دستورات را در فایلها ذخیره کنیم.
پس از مطالعه این جزوه، شما قادر خواهید بود:
echo متن در ترمینال نمایش دهیدecho و تغییردهندهها فایل بسازیدtouch فایلهای خالی ایجاد کنیدecho * و ls را درک کنید
فرمان echo یکی از سادهترین و پرکاربردترین دستورات در لینوکس است که
برای نمایش یک خط متن در خروجی استاندارد (ترمینال) استفاده میشود.
این فرمان هم به صورت built-in (ساخته شده در خود شل) و هم به صورت
یک برنامه مجزا در سیستم وجود دارد [citation:1][citation:6][citation:7].
همانطور که میبینید، echo هر متنی که به آن بدهید را در ترمینال چاپ میکند [citation:7].
| گزینه | توضیح |
|---|---|
-n |
بدون رفتن به خط جدید (عدم چاپ کاراکتر newline در انتها) [citation:1][citation:6] |
-e |
فعالسازی تفسیر دنبالههای فرار (escape sequences) مانند \n و \t [citation:1][citation:6] |
-E |
غیرفعالسازی تفسیر دنبالههای فرار (حالت پیشفرض) [citation:1][citation:6] |
--help |
نمایش راهنما [citation:1][citation:6] |
--version |
نمایش نسخه برنامه [citation:1][citation:6] |
وقتی از گزینه -e استفاده میکنید، دنبالههای زیر شناسایی میشوند [citation:1][citation:6][citation:13]:
| دنباله | توضیح |
|---|---|
\\ |
نمایش یک بکاسلش |
\a |
اعلان صوتی (Alert / Bell) |
\b |
Backspace (یک کاراکتر به عقب) |
\c |
متوقف کردن خروجی (چیزی بعد از این چاپ نمیشود) |
\e |
کاراکتر Escape |
\f |
Form Feed (صفحه جدید) |
\n |
خط جدید (Newline) |
\r |
Carriage Return (بازگشت به ابتدای خط) |
\t |
تب افقی (Horizontal Tab) |
\v |
تب عمودی (Vertical Tab) |
\0NNN |
بایت با مقدار هشتعالی (Octal) NNN (۱ تا ۳ رقم) |
\xHH |
بایت با مقدار شانزدهعالی (Hexadecimal) HH (۱ تا ۲ رقم) |
با \n میتوانید متن را به چند خط تقسیم کنید.
با \t میتوانید خروجی را به صورت جدولی مرتب کنید.
با -n، نشانگر (prompt) در ادامه همان خط ظاهر میشود.
رفتار echo ممکن است در شلهای مختلف (bash، zsh، dash) متفاوت باشد.
برای نوشتن اسکریپتهای قابل حمل (portable)، بهتر است از printf
استفاده کنید که رفتار یکسانی در همه سیستمها دارد [citation:1][citation:6].
یکی از مهمترین کاربردهای echo، ایجاد فایلهای متنی با استفاده از
تغییردهندههای خروجی (Redirection Operators) است. در لینوکس،
با استفاده از علامتهای > و >> میتوانیم
خروجی یک دستور را به جای نمایش در ترمینال، در یک فایل ذخیره کنیم [citation:2][citation:5][citation:9].
علامت > خروجی را در یک فایل ذخیره میکند.
اگر فایل وجود نداشته باشد، ساخته میشود. اگر وجود داشته باشد، محتوای قبلی آن کاملاً پاک
و با خروجی جدید جایگزین میشود [citation:2][citation:5][citation:9].
این دستور فایل myfile.txt را ایجاد کرده و متن داخل آن مینویسد.
در مثال شما echo yasin > abcde، فایل abcde ساخته شده
و کلمه yasin در آن نوشته میشود.
علامت >> خروجی را به انتهای فایل اضافه میکند
بدون اینکه محتوای قبلی را پاک کند [citation:2][citation:5][citation:9].
علامت < برعکس > عمل میکند و
محتوای یک فایل را به عنوان ورودی به دستور میدهد [citation:9].
این دستور تعداد خطوط فایل file.txt را نشان میدهد.
یکی از نکات جالب در لینوکس این است که میتوان از echo *
برای لیست کردن فایلهای دایرکتوری جاری استفاده کرد [citation:4][citation:12].
echo * فقط نام فایلها و دایرکتوریها را
در یک خط و با فاصله نمایش میدهد [citation:4][citation:12].
ls علاوه بر نامها، اطلاعات بیشتری مانند
مجوزها، مالک، اندازه و تاریخ را با گزینههای مناسب نمایش میدهد [citation:4][citation:12].
ls اگر دایرکتوری باشد، محتوای داخل آن را نیز نمایش میدهد،
در حالی که echo * فقط نام دایرکتوری را نشان میدهد [citation:4].
echo * در مواقعی که ls در دسترس نباشد (مثل محیطهای بازیابی سیستم)
بسیار مفید است [citation:12].
استفاده از echo * به عنوان جایگزین ls کاملاً قابل اعتماد نیست،
زیرا اگر نام فایلها با کاراکتر - شروع شوند یا شامل دنبالههای فرار باشند،
ممکن است echo آنها را به اشتباه به عنوان گزینه تفسیر کند [citation:8].
فرمان touch یکی از کاربردیترین دستورات برای ایجاد فایلهای خالی
و همچنین بهروزرسانی زمان دسترسی و تغییر فایلها است [citation:3][citation:11].
اگر فایل newfile.txt وجود نداشته باشد، یک فایل خالی ایجاد میکند.
اگر وجود داشته باشد، زمان تغییر (Modification Time) آن را به زمان فعلی بهروز میکند [citation:3][citation:11].
| گزینه | توضیح |
|---|---|
-a |
فقط زمان دسترسی (Access Time) را تغییر میدهد [citation:3][citation:11] |
-m |
فقط زمان تغییر (Modification Time) را تغییر میدهد [citation:3][citation:11] |
-c, --no-create |
اگر فایل وجود نداشت، آن را ایجاد نمیکند [citation:3][citation:11] |
-d, --date=STRING |
از تاریخ و زمان مشخص شده به جای زمان فعلی استفاده میکند [citation:3][citation:11] |
-r, --reference=FILE |
زمانها را از یک فایل مرجع کپی میکند [citation:3][citation:11] |
-t [[CC]YY]MMDDhhmm[.ss] |
از زمان مشخص شده با فرمت عددی استفاده میکند [citation:3][citation:11] |
-h, --no-dereference |
بر روی لینکهای سمبلیک تأثیر میگذارد نه فایل مقصد [citation:3] |
--help |
نمایش راهنما [citation:3] |
--version |
نمایش نسخه برنامه [citation:3] |
سه فایل خالی به نامهای file1.txt، file2.txt و file3.txt ایجاد میکند.
زمان فایل را به ۱۵ ژانویه ۲۰۲۴، ساعت ۱۰:۳۰:۰۰ تنظیم میکند [citation:11].
📝 کپی زمان از فایل دیگر:
زمانهای newfile.txt را با زمانهای reference.txt یکسان میکند [citation:11].
touch از عبارات زمانی قابل خواندن مانند "yesterday" و "2 weeks ago" پشتیبانی میکند [citation:11].
make
فایل را تغییر یافته در نظر بگیرند [citation:11]
| ویژگی | echo > فایل | touch فایل |
|---|---|---|
| ایجاد فایل | بله، با محتوا | بله، خالی |
| نوشتن محتوا | بله | خیر (فایل خالی است) |
| بهروزرسانی زمان | بله (به زمان فعلی) | بله (به زمان فعلی یا دلخواه) |
| تنظیم زمان دلخواه | خیر | بله با -t یا -d |
| ایجاد چند فایل | خیر (هر بار یک فایل) | بله (با لیست کردن نامها) |
echo → نمایش متن در ترمینال
-n → بدون خط جدید-e → فعالسازی دنبالههای فرار (\n، \t و ...)-E → غیرفعالسازی دنبالههای فرار (پیشفرض)> → ایجاد یا بازنویسی فایل>> → افزودن به انتهای فایل< → استفاده از فایل به عنوان ورودیecho * → لیست کردن فایلها (مشابه ls اما سادهتر)
touch → ایجاد فایل خالی یا بهروزرسانی زمان
-a → فقط زمان دسترسی-m → فقط زمان تغییر-c → ایجاد نکن اگر وجود ندارد-t یا -d → تنظیم زمان دلخواه
۱. با echo -e یک متن چندخطی با استفاده از \n ایجاد کنید.
۲. با echo و > یک فایل جدید بسازید و محتوای آن را با cat مشاهده کنید.
۳. با echo و >> چند خط به فایل اضافه کنید.
۴. با touch سه فایل خالی به صورت همزمان ایجاد کنید.
۵. با touch -t زمان یک فایل را به تاریخ مشخصی تنظیم کنید.
۶. تفاوت خروجی echo * و ls را در یک دایرکتوری پر از فایل بررسی کنید.